// let obj:Object = null; // null is a value of type 'null'
// let obj:Object = undefined; // undefined is a value of type 'undefined'
// 结论：null和undefined不可以赋值给Object类型的变量
// {}是Object的简写

let obj: object = {};
// 结论：object只接收对象类型的值，不接收原始类型的值

// 常用的24种TS类型
// 基本类型
/** number、string、boolean、symbol、null、undefined **/
// 根类型
/** Object,{} **/
// 对象类型
/** Array、object、function **/
// 枚举
/** enum **/
// 其他特殊类型
/** any、unkown、never、void、tuple(元组)、可变元组 **/
// 合成类型
/** 联合类型、交叉类型 **/
// 联合类型
let str: string | number = 'abc';
str = 3;
// 交叉类型
type Obj1 = { username: string };
type Obj2 = { age: number };
let obj1: Obj1 = { username: 'lisi' };
let obj2: Obj2 = { age: 18 };

let obj3: Obj1 & Obj2 = { username: 'lisi', age: 18 };

// 字面量数据类型
type num = 1 | 2 | 3;
// let n:num = 4; // Type '4' is not assignable to type '1 | 2 | 3'.

// type increaseFlag = 0 | 1;
// function isStartUp(flag: increaseFlag) {
//     if (flag === 1) {
//         console.log('启动成功')
//     } else {
//         console.log('启动失败')
//     }
// }
// isStartUp(1);

// isStartUp(3);   // Argument of type '3' is not assignable to parameter of type 'increaseFlag'.

export { }